1 Introduction

The purpose of this notebook is to plot several quality control metrics across clusters, so that we can have an idea of which clusters might be problematic.

1.1 Load packages

library(Seurat)
library(tidyverse)

1.2 Parameters

# Paths
path_to_level_3 <- here::here("scRNA-seq/results/R_objects/level_3/")
path_to_level_3_cell_type <- str_c(path_to_level_3, cell_type, sep = "")
path_to_obj <- str_c(
  path_to_level_3_cell_type,
  "/",
  cell_type,
  "_clustered_level_3.rds",
  sep = ""
)


# Functions
source(here::here("scRNA-seq/bin/utils.R"))


# Colors
color_palette <- c("black", "gray", "red", "yellow", "plum4", "green4",
                   "blue", "mediumorchid2", "coral2", "blueviolet",
                   "indianred4", "deepskyblue1", "dimgray", "deeppink1",
                   "green", "lightgray", "hotpink1", "gold", "brown",
                   "mediumvioletred", "mediumaquamarine")


# Point sizes
pt_sizes <- c(
  NBC_MBC = 0.15,
  GCBC = 0.15,
  CD4_T = 0.25,
  Cytotoxic = 0.4,
  PC = 0.4,
  myeloid = 0.6,
  FDC = 0.6,
  PDC = 1,
  epithelial = 1
)
pt_size <- pt_sizes[cell_type]

1.3 Load data

seurat <- readRDS(path_to_obj)
seurat
## An object of class Seurat 
## 37378 features across 81653 samples within 1 assay 
## Active assay: RNA (37378 features, 0 variable features)
##  3 dimensional reductions calculated: pca, umap, harmony

2 Visualize UMAP

umap_clusters <- DimPlot(
  seurat,
  group.by = "seurat_clusters",
  pt.size = pt_size,
  cols = color_palette
)
umap_clusters

3 Assess integration

p_assay <- plot_split_umap(seurat, var = "assay")
p_assay

4 pDNN and scrublet prediction

pDNN_vars <- c("pDNN_hashing", "pDNN_scrublet", "pDNN_union")
pDNN_gg <- purrr::map(pDNN_vars, function(x) {
  p <- plot_pDNN(seurat_obj = seurat, pDNN_var = x, pt_size = pt_size)
  p
})
pDNN_gg
## [[1]]

## 
## [[2]]

## 
## [[3]]

# Violin plots
pDNN_violins_gg <- purrr::map(pDNN_vars, function(x) {
  p <- VlnPlot(
    seurat,
    features = x,
    pt.size = 0,
    group.by = "seurat_clusters",
    cols = color_palette
  ) +
    xlab("") +
    theme(legend.position = "none")
  p
})
pDNN_violins_gg
## [[1]]

## 
## [[2]]

## 
## [[3]]

# Scrublet
seurat$scrublet_predicted_doublet[seurat$scrublet_predicted_doublet == "True"] <- "TRUE"
seurat$scrublet_predicted_doublet[seurat$scrublet_predicted_doublet == "False"] <- "FALSE"
scrublet_gg <- DimPlot(seurat, group.by = "scrublet_predicted_doublet")
scrublet_gg

5 QC metrics

qc_vars <- c(
  "nCount_RNA",
  "nFeature_RNA",
  "pct_mt",
  "pct_ribosomal"
)
qc_gg <- purrr::map(qc_vars, function(x) {
  p <- FeaturePlot(seurat, features = x, pt.size = pt_size)
  p +
    scale_color_viridis_c(option = "magma")
})
qc_gg
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

# Violin plots
qc_violins_gg <- purrr::map(qc_vars, function(x) {
  p <- VlnPlot(
    seurat,
    features = x,
    pt.size = 0,
    group.by = "seurat_clusters",
    cols = color_palette
  ) +
    xlab("") +
    theme(legend.position = "none")
  p
})
qc_violins_gg
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

6 Cell cycle scoring

s_gg <- FeaturePlot(seurat, features = "S.Score", pt.size = pt_size) +
  scale_color_viridis_c(option = "magma")
s_gg

g2m_gg <- FeaturePlot(seurat, features = "G2M.Score", pt.size = pt_size) +
  scale_color_viridis_c(option = "magma")
g2m_gg

# Violin Plots
cc_violins_gg <- purrr::map(c("S.Score", "G2M.Score"), function(x) {
  p <- VlnPlot(
    seurat,
    features = x,
    pt.size = 0,
    group.by = "seurat_clusters",
    cols = color_palette
  ) +
    xlab("") +
    theme(legend.position = "none")
  p
})
cc_violins_gg
## [[1]]

## 
## [[2]]

7 Session Information

sessionInfo()
## R version 3.6.0 (2019-04-26)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Red Hat Enterprise Linux Server release 6.7 (Santiago)
## 
## Matrix products: default
## BLAS:   /apps/R/3.6.0/lib64/R/lib/libRblas.so
## LAPACK: /home/devel/rmassoni/anaconda3/lib/libmkl_rt.so
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=es_ES.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=es_ES.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=es_ES.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=es_ES.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] forcats_0.5.0    stringr_1.4.0    dplyr_1.0.4      purrr_0.3.4      readr_1.3.1      tidyr_1.1.0      tibble_3.0.1     ggplot2_3.3.0    tidyverse_1.3.0  Seurat_3.2.0     BiocStyle_2.14.4
## 
## loaded via a namespace (and not attached):
##   [1] Rtsne_0.15            colorspace_1.4-1      deldir_0.1-25         ellipsis_0.3.1        ggridges_0.5.2        rprojroot_1.3-2       fs_1.4.1              rstudioapi_0.11       spatstat.data_1.4-3   farver_2.0.3          leiden_0.3.3          listenv_0.8.0         ggrepel_0.8.2         fansi_0.4.1           lubridate_1.7.8       xml2_1.3.2            codetools_0.2-16      splines_3.6.0         knitr_1.28            polyclip_1.10-0       jsonlite_1.7.2        broom_0.5.6           ica_1.0-2             cluster_2.1.0         dbplyr_1.4.4          png_0.1-7             uwot_0.1.8            shiny_1.4.0.2         sctransform_0.2.1     BiocManager_1.30.10   compiler_3.6.0        httr_1.4.2            backports_1.1.7       assertthat_0.2.1      Matrix_1.2-18         fastmap_1.0.1         lazyeval_0.2.2        cli_2.0.2             later_1.0.0           htmltools_0.5.1.1     tools_3.6.0           rsvd_1.0.3            igraph_1.2.5          gtable_0.3.0          glue_1.4.1            RANN_2.6.1            reshape2_1.4.4        rappdirs_0.3.1        Rcpp_1.0.6            spatstat_1.64-1       cellranger_1.1.0      vctrs_0.3.6           ape_5.3               nlme_3.1-148         
##  [55] lmtest_0.9-37         xfun_0.14             globals_0.12.5        rvest_0.3.5           mime_0.9              miniUI_0.1.1.1        lifecycle_0.2.0       irlba_2.3.3           goftest_1.2-2         future_1.17.0         MASS_7.3-51.6         zoo_1.8-8             scales_1.1.1          hms_0.5.3             promises_1.1.0        spatstat.utils_1.17-0 parallel_3.6.0        RColorBrewer_1.1-2    yaml_2.2.1            reticulate_1.16       pbapply_1.4-2         gridExtra_2.3         rpart_4.1-15          stringi_1.4.6         rlang_0.4.10          pkgconfig_2.0.3       evaluate_0.14         lattice_0.20-41       ROCR_1.0-11           tensor_1.5            labeling_0.3          patchwork_1.0.0       htmlwidgets_1.5.1     cowplot_1.0.0         tidyselect_1.1.0      here_0.1              RcppAnnoy_0.0.16      plyr_1.8.6            magrittr_1.5          bookdown_0.19         R6_2.4.1              generics_0.0.2        DBI_1.1.0             withr_2.4.1           pillar_1.4.4          haven_2.3.1           mgcv_1.8-31           fitdistrplus_1.1-1    survival_3.1-12       abind_1.4-5           future.apply_1.5.0    modelr_0.1.8          crayon_1.3.4          KernSmooth_2.23-17   
## [109] plotly_4.9.2.1        rmarkdown_2.2         readxl_1.3.1          grid_3.6.0            data.table_1.12.8     blob_1.2.1            reprex_0.3.0          digest_0.6.20         xtable_1.8-4          httpuv_1.5.3.1        munsell_0.5.0         viridisLite_0.3.0